package com.gomtel.smartdevice.utils;

import android.graphics.Color;
import android.graphics.Matrix;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.gomtel.smartdevice.R;
import com.gomtel.smartdevice.global.WatchApplication;

import java.text.DecimalFormat;

/**
 * Created by Administrator on 2018/5/22 0022.
 */

public class ChartUtils {

    /**
     * 设置柱形图的样式
     */
    public void setBarChart(BarChart chart, int first, int last, int count) {
        WatchApplication instance = WatchApplication.getInstance();
        chart.removeAllViews();
        chart.refreshDrawableState();
        chart.notifyDataSetChanged();
        chart.setDrawGridBackground(false);//设置网格背景
        chart.setScaleEnabled(false);//设置缩放
        chart.setDoubleTapToZoomEnabled(false);//设置双击不进行缩放
        chart.setDrawValueAboveBar(false);
        chart.setDrawBarShadow(false);
        chart.setDrawHighlightArrow(false);
        chart.setDescription(null);
        chart.setTouchEnabled(false);
        chart.getAxisLeft().setEnabled(false); //不显示轴承
        chart.getAxisRight().setEnabled(false);
        chart.getLegend().setEnabled(false); //去除左下角小方块类
        chart.getViewPortHandler().setMaximumScaleY(300);

        //设置X轴
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴的位置
        xAxis.setEnabled(true);
        xAxis.setGridColor(instance.getResources().getColor(R.color.transparent));
//        xAxis.setTextColor(instance.getResources().getColor(R.color.transparent));
        xAxis.setAxisLineColor(instance.getResources().getColor(R.color.transparent));
        xAxis.setDrawAxisLine(false);
        xAxis.setDrawGridLines(false);//不绘制格网线
        xAxis.setSpaceBetweenLabels(1);

        LimitLine line_1 = new LimitLine(0f, "");
        line_1.setLineColor(instance.getResources().getColor(R.color.gray));
        line_1.setLineWidth(1f);
        line_1.enableDashedLine(10f, 10f, 0f);
        line_1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);

        LimitLine line_2 = new LimitLine((float) first, new StringBuffer().append(first).append("").toString());
        line_2.setTextSize(10f);
        line_2.setTextColor(instance.getResources().getColor(R.color.gray));
        line_2.setLineColor(instance.getResources().getColor(R.color.gray));
        line_2.setLineWidth(1f);
        line_2.enableDashedLine(10f, 10f, 0f);
        line_2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);

        LimitLine line_3 = new LimitLine((float) last, new StringBuffer().append(last).append("").toString());
        line_3.setTextSize(10f);
        line_3.setTextColor(instance.getResources().getColor(R.color.gray));
        line_3.setLineColor(instance.getResources().getColor(R.color.gray));
        line_3.setLineWidth(1f);
        line_3.enableDashedLine(10f, 10f, 0f);
        line_3.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);

        //获得左侧侧坐标轴
        YAxis leftAxis = chart.getAxisLeft();
        leftAxis.removeAllLimitLines();
        leftAxis.resetAxisMaxValue();
        leftAxis.resetAxisMinValue();
        leftAxis.setAxisMaxValue(last);
        leftAxis.setAxisMinValue(first);
        leftAxis.setLabelCount(count, false);
        leftAxis.setDrawGridLines(false);//不绘制y轴格网线
        leftAxis.setDrawLabels(false);
        leftAxis.addLimitLine(line_1);
        leftAxis.addLimitLine(line_2);
        leftAxis.addLimitLine(line_3);

    }


    /**
     * 设置线形图的样式
     */
    public void setLineChart(LineChart chart, int first, int last, int count) {
        chart.setNoDataText("暂无数据");
        WatchApplication instance = WatchApplication.getInstance();
        chart.setScaleEnabled(false); // 设置缩放
        chart.setDescription(null);
        chart.getAxisLeft().setEnabled(false); //不显示轴承
        chart.getAxisRight().setEnabled(false);
        chart.getLegend().setEnabled(false); //去除左下角小方块类
        chart.setDrawGridBackground(false); // 设置网格背景
        chart.setTouchEnabled(false);
        chart.setDoubleTapToZoomEnabled(false); // 设置双击不进行缩放
        chart.setAutoScaleMinMaxEnabled(false);

        chart.setScaleMinima(1f, 1f);
        Matrix matrix = new Matrix();
        matrix.postScale(1.0f, 1.0f);
        chart.getViewPortHandler().refresh(matrix, chart, true);

        // 设置X轴
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置X轴的位置
        xAxis.setGridColor(instance.getResources().getColor(R.color.transparent));
//        xAxis.setTextColor(instance.getResources().getColor(R.color.transparent));
        xAxis.setAxisLineColor(instance.getResources().getColor(R.color.transparent));
        xAxis.setDrawAxisLine(false);
        xAxis.setDrawGridLines(false);
        xAxis.setSpaceBetweenLabels(1);
        xAxis.setAvoidFirstLastClipping(true);

        // 获得左侧侧坐标轴
        YAxis leftAxis = chart.getAxisLeft();
        leftAxis.removeAllLimitLines();
        leftAxis.resetAxisMaxValue();
        leftAxis.resetAxisMinValue();
        leftAxis.setTextSize(18f);
        leftAxis.setDrawGridLines(false);//不绘制y轴格网线
        leftAxis.setAxisMaxValue(last + 2);
        leftAxis.setAxisMinValue(first);
        leftAxis.setLabelCount(count, false);
        leftAxis.setDrawLabels(false);
        leftAxis.setAxisLineWidth(1.5f);
        leftAxis.setShowOnlyMinMax(true);
        leftAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);

        //标准线
        LimitLine line_1 = new LimitLine(0f, "");
        line_1.setLineColor(instance.getResources().getColor(R.color.gray));
        line_1.setLineWidth(1f);
        line_1.enableDashedLine(10f, 10f, 0f);
        line_1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);

        LimitLine line_2 = new LimitLine((float) first, new StringBuffer().append(FormatFloat(first)).append("km").toString());
        line_2.setTextSize(10f);
        line_2.setTextColor(instance.getResources().getColor(R.color.gray));
        line_2.setLineColor(instance.getResources().getColor(R.color.gray));
        line_2.setLineWidth(1f);
        line_2.enableDashedLine(10f, 10f, 0f);
        line_2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);

        LimitLine line_3 = new LimitLine((float) last, new StringBuffer().append(FormatFloat(last)).append("km").toString());
        line_3.setTextSize(10f);
        line_3.setTextColor(instance.getResources().getColor(R.color.gray));
        line_3.setLineColor(instance.getResources().getColor(R.color.gray));
        line_3.setLineWidth(1f);
        line_3.enableDashedLine(10f, 10f, 0f);
        line_3.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        leftAxis.addLimitLine(line_1);
        leftAxis.addLimitLine(line_2);
        leftAxis.addLimitLine(line_3);
    }

    /**
     * 设置心率线形图的样式
     */
    public void setHeartLineChart(LineChart chart) {
        chart.setNoDataText("暂无数据");
        WatchApplication instance = WatchApplication.getInstance();
//        chart.getAxisLeft().setEnabled(false); //不显示轴承
        chart.getAxisRight().setEnabled(false);
        chart.setDescription(null);
        chart.getLegend().setEnabled(false); //去除左下角小方块类
        chart.setDrawGridBackground(false); // 设置网格背景
        chart.setTouchEnabled(false);
        chart.setScaleEnabled(false); // 设置缩放
        chart.setDoubleTapToZoomEnabled(false); // 设置双击不进行缩放
        chart.setAutoScaleMinMaxEnabled(false);

        // 设置X轴
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置X轴的位置
        xAxis.setEnabled(true);
        xAxis.setDrawGridLines(false);
//        xAxis.setDrawAxisLine(false);
        xAxis.setTextSize(12);
        xAxis.setTextColor(instance.getResources().getColor(R.color.transparent));
        xAxis.setSpaceBetweenLabels(1);

        // 获得左侧侧坐标轴
        YAxis leftAxis = chart.getAxisLeft();
        leftAxis.setTextSize(12f);
        leftAxis.setDrawGridLines(false);//不绘制y轴格网线
        leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
//        leftAxis.setDrawLabels(false);

        //设置右侧坐标轴
        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setDrawAxisLine(false); // 右侧坐标轴线
        rightAxis.setDrawLabels(false); // 右侧坐标轴数组Label

    }

    /**
     * 历史线形图的样式
     */
    public void setHistoryChart(LineChart chart) {
        chart.setNoDataText("暂无数据");
        chart.getAxisLeft().setEnabled(false); //不显示轴承
        chart.getAxisRight().setEnabled(true);
        chart.setDescription(null);
        chart.getLegend().setEnabled(false); //去除左下角小方块类
        chart.setDrawGridBackground(false); // 设置网格背景
        chart.setTouchEnabled(false);
        chart.setScaleEnabled(false); // 设置缩放
        chart.setDoubleTapToZoomEnabled(false); // 设置双击不进行缩放
        chart.setAutoScaleMinMaxEnabled(false);

        // 设置X轴
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置X轴的位置
        xAxis.setEnabled(true);
        xAxis.setDrawGridLines(false);
//        xAxis.setDrawAxisLine(false);
        xAxis.setTextSize(12f);
        xAxis.setTextColor(Color.BLACK);
        xAxis.setSpaceBetweenLabels(1);

        //设置右侧坐标轴
        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setTextSize(10f);
        rightAxis.setDrawAxisLine(true); // 右侧坐标轴线
//        rightAxis.setDrawLabels(false); // 右侧坐标轴数组Label
        rightAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);


    }


    /**
     * 历史柱形图的样式
     */
    public void setHistoryBarChart(BarChart chart) {
        WatchApplication instance = WatchApplication.getInstance();

        chart.getAxisLeft().setEnabled(false); //不显示轴承
        chart.getAxisRight().setEnabled(true);
        chart.setDescription(null);
        chart.getLegend().setEnabled(false); //去除左下角小方块类
        chart.setDrawGridBackground(false); // 设置网格背景
        chart.setTouchEnabled(false);
        chart.setScaleEnabled(false); // 设置缩放
        chart.setDoubleTapToZoomEnabled(false); // 设置双击不进行缩放
        chart.setAutoScaleMinMaxEnabled(false);

        // 设置X轴
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置X轴的位置
        xAxis.setEnabled(true);
        xAxis.setDrawGridLines(false);
//        xAxis.setDrawAxisLine(false);
        xAxis.setTextSize(12f);
        xAxis.setTextColor(Color.BLACK);
        xAxis.setSpaceBetweenLabels(1);

        //设置右侧坐标轴
        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setTextSize(10f);
        rightAxis.setDrawAxisLine(true); // 右侧坐标轴线
//        rightAxis.setDrawLabels(false); // 右侧坐标轴数组Label
        rightAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);

    }

    /**
     * 房颤线形图的样式
     */
    public void setAtrialFibrillationChart(LineChart chart) {
        chart.setNoDataText("暂无数据");
        chart.getAxisLeft().setEnabled(true); //不显示轴承
        chart.getAxisRight().setEnabled(false);
        chart.setDescription(null);
        chart.getLegend().setEnabled(false); //去除左下角小方块类
        chart.setDrawGridBackground(false); // 设置网格背景
        chart.setTouchEnabled(false);
        chart.setScaleEnabled(false); // 设置缩放
        chart.setDoubleTapToZoomEnabled(false); // 设置双击不进行缩放
        chart.setAutoScaleMinMaxEnabled(false);

        // 设置X轴
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置X轴的位置
        xAxis.setEnabled(true);
        xAxis.setDrawGridLines(false);
//        xAxis.setDrawAxisLine(false);
        xAxis.setTextSize(12f);
        xAxis.setTextColor(Color.BLACK);
        xAxis.setSpaceBetweenLabels(1);

        //设置右侧坐标轴
        YAxis rightAxis = chart.getAxisLeft();
        rightAxis.setTextSize(10f);
        rightAxis.setDrawAxisLine(true); // 右侧坐标轴线
//        rightAxis.setDrawGridLines(false);//不绘制y轴格网线
//        rightAxis.setDrawLabels(false); // 右侧坐标轴数组Label
        rightAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
    }


    private String FormatFloat(int i) {
        DecimalFormat df = new DecimalFormat("0.00");
        return df.format((float) i / 1000);
    }
}
